﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LaxFriedrichsModel
{
    class Program
    {
        static void Main(string[] args)
        {
            Equatios Eqs = new Equatios(100);
            Eqs.NumX = 100;
            Eqs.NumT = 100;
            Eqs.T = 1;
            Eqs.X = 1;
            Eqs.Dt = Eqs.T / Eqs.NumT;
            Eqs.Dx = Eqs.X / Eqs.NumX;
            for (int i = 0; i < Eqs.NumX; i++)
            {
                float D = 4.0f;
                Eqs.UArr[i] = new U();
                Eqs.UArr[i].Adiabat = 1.4f;
                Eqs.UArr[i].Velocity =  2.0f / (Eqs.UArr[i].Adiabat + 1.0f) * (D - 1.0f / D);
                Eqs.UArr[i].Density =  D / (D - Eqs.UArr[i].Velocity);
                Eqs.UArr[i].Pressure = D * Eqs.UArr[i].Velocity + 1 / Eqs.UArr[i].Adiabat;


                Eqs.UArr[i].InnerEnergy = Eqs.UArr[i].Pressure / ((Eqs.UArr[i].Adiabat - 1)*Eqs.UArr[i].Density );
                Eqs.UArr[i].SetFullEnergy();
            }

            Eqs.UArr[0].Adiabat = 1.4f;
            Eqs.UArr[0].Velocity = 0;
            Eqs.UArr[0].Density =  1.0f;
            Eqs.UArr[0].Pressure =  1 / Eqs.UArr[0].Adiabat;
            Eqs.UArr[0].InnerEnergy = Eqs.UArr[0].Pressure / ((Eqs.UArr[0].Adiabat - 1) * Eqs.UArr[0].Density);
            Eqs.UArr[0].SetFullEnergy();

            //Eqs.UArr[Eqs.NumX - 1].Adiabat = 1.3f;
            //Eqs.UArr[Eqs.NumX - 1].Velocity = 0;
            //Eqs.UArr[Eqs.NumX - 1].Density = 1.0f;
            //Eqs.UArr[Eqs.NumX - 1].Pressure = 1 / Eqs.UArr[0].Adiabat;
            //Eqs.UArr[Eqs.NumX - 1].InnerEnergy = Eqs.UArr[0].Pressure / ((Eqs.UArr[0].Adiabat - 1) * Eqs.UArr[0].Density);
            //Eqs.UArr[Eqs.NumX - 1].SetFullEnergy();

            Eqs.UArr[Eqs.NumX - 1].Adiabat = Eqs.UArr[0].Adiabat;
            Eqs.UArr[Eqs.NumX - 1].Velocity = Eqs.UArr[0].Velocity;
            Eqs.UArr[Eqs.NumX - 1].Density = Eqs.UArr[0].Density;
            Eqs.UArr[Eqs.NumX - 1].Pressure = Eqs.UArr[0].Pressure;
            Eqs.UArr[Eqs.NumX - 1].InnerEnergy = Eqs.UArr[0].InnerEnergy;
            Eqs.UArr[0].SetFullEnergy();

            
            U[] uArr = Eqs.GetLayer(2);
            //foreach (var u in uArr)
              //  Console.WriteLine(u.Velocity);
            
        }
    }
}
